// import { config } from '@vue/test-utils'
import axios from 'axios'
import store from '@/store'
import { Message } from 'element-ui'
import router from '@/router'
// 创建axios实例:配置基地址:
// 一个项目可能有多个基地址，对于不同的基地址创建不同的实例，需要使用时，直接按需导入实例
const service = axios.create({
  // 请求的基地址:改为去自己的服务器请求(默认去自己的服务器，可以省略)，解决跨域问题
  // 在环境变量中定义修改基地址
  baseURL: process.env.VUE_APP_BASE_API,
  // 请求超时时间
  timeout: 5000
})
// 请求拦截器
service.interceptors.request.use(config => {
  // 从vuex中获取token
  const { token } = store.state.user
  if (token) { // 如果有token
    // 通过请求头携带给后台，给headers添加Authorization属性
    config.headers.Authorization = `Bearer ${token}`
  }
  // 因为向服务器请求，所以要return返回请求对象给服务器
  return config
}, err => Promise.reject(err))
// 响应拦截器
service.interceptors.response.use(resp => {
  // 结构后台数据
  const { data } = resp
  // 判断data.success
  if (data.success) {
    // 请求成功
    // 直接返回data的数据
    return data
  }
  // 请求失败，返回一个失败态的promise实例
  return Promise.reject(data)
}, async err => {
  // token过期
  // 判断token过期状态码
  if (err.response.status === 401 && err.response.data.code === 10002) {
    // 给出token过期提示
    Message.error('登陆过期，请重新登录')
    // 清空vuex中的token和用户信息
    await store.dispatch('user/logoutAction')
    // 跳转至登录，并携带回跳地址router.currentRoute:当前激活的路由对象
    router.replace(`/login?redirectUrl=${router.currentRoute.fullPath}`)
  }
  return Promise.reject(err)
})
// 导出请求实例
export default service
// 如果要导出多个，则按需导出
// export{
//   service1,
//   service2
// }
